箭頭函式
傳統函式
const callName = function(someone){
    return '我是' +  someone;
}
console.log(callName('皮傑先生'));
箭頭函式
// 箭頭函式
// 若是程式碼內容為表達式時,不需要大括號{}
// 若只有一個參數 可省略括號
const callName = someone => '我是' + someone;
console.log(callName('皮傑先生'));
與傳統函式不同之處
傳統函式
var nums = function(){
    console.log(arguments);
}
nums(1,2,3,4,50,100);
箭頭函式
// arguments is no defined
var nums = () =>{
    console.log(arguments);
}
nums(1,2,3,4,50,100);
解決方式
其餘參數
原型是陣列(與 arguments 不同)
var nums = (...arg) =>{
    console.log(arg);
}
nums(1,2,3,4,50,100);
箭頭函式沒有自己的 this
傳統函式
var myName = '全域';
var person = {
    myName:'皮傑先生',
    callName: function(){
        console.log('1',this.myName); // 1 皮傑先生
        setTimeout(function(){
            console.log('2',this.myName); // 2 全域
            console.log('3',this); // window
        })
    }
}
person.callName();
箭頭函式
var myName = '全域';
var person = {
    myName:'皮傑先生',
    callName: function(){
        console.log('1',this.myName); // 1 皮傑先生
        setTimeout(()=>{ 
            // 這裡會用外層作用域的 this
            console.log('2',this.myName); // 2 皮傑先生
            console.log('3',this); // person
        })
    }
}
person.callName();
var myName = '全域';
var person = {
    myName:'皮傑先生',
    callName: ()=>{
        console.log('1',this.myName); // 1 全域
        setTimeout(()=>{ 
            // 這裡會用外層作用域的 this
            console.log('2',this.myName); // 2 全域
            console.log('3',this); // window
        })
    }
}
person.callName();
也無法透過 call,apply,bind 重新給予 this
const family = {
    myName:'123',
}
const fn = (a,b) =>{
    console.log(this,a,b); // window 小黑 小白
}
fn.call(family,'小黑','小白');
const fn = function(a){
    this.name = a;
}
const ArrowFn = a =>{
    this.name = a;
}
console.log(fn.prototype);
console.log(ArrowFn.prototype); // undefined
const a = new fn('a');
console.log(a);
const b = new ArrowFn('b');
console.log(b);
那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷